############################
# 使用libpcap进行自动化抓包分析
# 依赖libpcap perl-Net-Pcap perl-NetPacket
###########################

#!/usr/bin/perl
use strict;
use warnings;
use Net::Pcap qw(:functions);
use NetPacket::Ethernet qw(:types);
use NetPacket::IP qw(:protos);
use NetPacket::TCP;
use NetPacket::TCP;
my $pcapfile = "Gameclient.pcap"; #指定需要解析的文件
my $err;
my $pcap = Net::Pcap::open_offline( $pcapfile, \$err ) or die "Can't read '$pcapfile': $err\n";#使用Pcap打开文件
Net::Pcap::loop( $pcap, -1, \&process_packet, '' ); #循环，直到文件尾部
Net::Pcap::close($pcap); #关闭抓包文件
#函数process_packet实际处理每个包，匹配、打印
sub process_packet {
my ( $user_data, $header, $packet ) = @_;
# NetPacket::Ethernet::strip($packet)把以太网首部去除，返回IP包
my $ip = NetPacket::IP->decode( NetPacket::Ethernet::strip($packet) );#对IP包进行解析
if ( $ip->{proto} == IP_PROTO_TCP ) {#先过滤TCP协议
my $TCP = NetPacket::TCP->decode( $ip->{data} ); #以TCP协议解析数据
if ( $TCP->{src_port} == 80 ) {#匹配服务器端的HTTP响应
print $TCP ->{data}, "\n"; #打印响应内容
        }
    }
}